package com.sy.service;

import com.github.pagehelper.Page;
import com.sy.dto.StuInfo;
import com.sy.dto.StudentMagTable;
import com.sy.dto.Table;
import com.sy.entity.*;
import com.sy.vo.Answers;
import com.sy.vo.ShortAnswer;
import com.sy.vo.StuInfoVo;
import com.sy.vo.StudentSubmitAnswer;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StudentService {
    /**
     * 获取学生信息
     * @param id
     * @return
     */
    StuInfo getStuInfo(String id);

    /**
     * 更新学生信息
     * @param stuInfoVo
     * @return
     */
    boolean updateStuInfo(StuInfoVo stuInfoVo);


    /**
     * 根据学生的id去查询学生没做过的作业列表
     */
    Page<HomeWorkMessage> getAllNotDoHomeWork(String id, String keywords, Integer page, Integer limit,Integer classId);



    /**
     * 根据作业的id去查询对应的所有的题目的内容
     */
    List<ChoiceQuestion> getAllQuestionsByHomeWorkId(String id);


    /**
     *根据题号的id查询简答题的内容
     * id
     */

    ShortQuestion getStudentNotDoHomeWorkShortQuestion(String id);


    /**
     * 根据学生的id去查询学生的所有信息
     */
      Student getStudentsMessage(String id);


    /**
     * 拿到学生已经做过的作业列表
     */

    Page<HomeWorkMessage> getAllHaveDoHomeWork(String id, String keywords, Integer page, Integer limit,Integer classId);


    /**
     * 拿到学生的作业成绩列表
     */

    Page<StudentShowScore>  getStudentGradeById(String id, String keywords, Integer page, Integer limit,Integer condition);

    /**
     * 学生拿到老师上传的文件
     */
    Page<StudentDownloadCourseware>  getTeacherUploadFile(Integer teacherId, String keywords, Integer page, Integer limit);


    /**
     * 根据班级的id去查询对应的老师id
     */
    ClassMsg selectTeacherByClassId(Integer classId);

    /**
     * 往数据库里添加学生写的简答题大难
     * @param studentId 学生id
     * @param shortquestionId 简答题的id
     * @param answer 作业答案
     * @return 布尔值
     */
    boolean insertShortAnswer(Integer studentId,Integer shortquestionId,String answer,Integer homeworkId);

    /**
     *往数据库里添加学生写的选择题答案
     * @param studentId 学生id
     * @param choicequestionId 选择题id
     * @param choiceId 答案id
     * @param homeworkId 作业的id
     * @return
     */
    boolean insertChoiceAnswer(Integer studentId,Integer choicequestionId,Integer choiceId,Integer homeworkId);

    /**
     * 将作业选择题和填空题一起插入，用事务来防止出错及时回滚
     */
    void insertHomeWorkAllAnswer(StudentSubmitAnswer studentSubmitAnswer,Integer studentId);


    /**
     * 根据作业的id去查询对应的选择题答案
     */

    List<Answers> selectSubmitChoiceAnswer(Integer homeworkId,Integer studentId);


    /**
     * 根据作业的Idq去查询对应的简答题答案
     */

    ShortAnswer selectSubmitShortAnswer(Integer homeworkId,Integer studentId);


    /**
     * 更新答案表里的选择题选项
     */
    boolean  updateChoiceAnswer(Integer choiceId, Integer homeworkId,Integer choicequestionId,Integer studentId);
    /**
     *更新简答题答案表里的答案
     */

    boolean updateShortQuestionAnswer(String answer,Integer homeworkId,Integer shortquestionId,Integer studentId);

    /**
     * 将作业选择题和填空题一起修改，用事务来防止出错及时回滚
     */
    void updateAllAnswer(StudentSubmitAnswer studentSubmitAnswer,Integer studentId);

    /**
     * 根据作业id去查未提交作业的学生信息列表
     */
  Page<StudentMagTable> getStudentsNoSubmit(Integer homeworkId,Integer page,Integer limit);

    /**
     *查找学生的个人信息
     */

    Student selectStudentsOwnMessage(Integer id);


    /**
     * 根据学生的班级id去查找学生的班级信息
     */
    ClassMsg selectClassMessageByClassId(Integer classId);

    /**
     * 更新学生新修改的个人信息
     */

    boolean updateStudentNewMessage(String name,String gender,String phone,Integer id);



    /**
     * 修改学生的密码
     */

    boolean updateStudentPassword(String oldPassword,Integer id,String  confirmNewPassword,String newPassword);


    /**
     * 根据作业的标题去查询作业对应的id
     */
    Homework   selectHomeWorkIdByTitle(String  title);

    /**
     * 根据作业的id去查询对应选择题的id
     */
    List< ChoiceAnswer> selectAllChoiceIdByHomeworkId(Integer homeworkId);

    /**
     * 根据选择题的id去查找对应的中文答案
     */

    Choice selectTrueChoiceAnswerByChoiceId(Integer choiceQuestionId);
}
